#ifndef __LEDC_H
#define __LEDC_H

#include "driver/gpio.h"
#include "driver/ledc.h"


/* 引脚以及重要参数定义 */
#define LEDC_PWM_TIMER          LEDC_TIMER_0        /* 使用定时器(0~3) */
#define LEDC_PWM_CH0_GPIO       GPIO_NUM_2          /* LED控制器通道对应GPIO */
#define LEDC_PWM_CH0_CHANNEL    LEDC_CHANNEL_0      /* LED控制器通道号(0~7) */

/* LEDC配置结构体 */
typedef struct
{
    ledc_clk_cfg_t clk_cfg;             /* 时钟源配置（LEDC_USE_XTAL_CLK\LEDC_USE_PLL_DIV_CLK\LEDC_USE_RC_FAST_CLK或者LEDC_AUTO_CLK(自动选择)） */
    ledc_timer_t  timer_num;            /* 定时器（LEDC_TIMER_0~LEDC_TIMER_3） */
    uint32_t freq_hz;                   /* 频率（系统自动计算分频系数） */
    ledc_timer_bit_t duty_resolution;   /* 占空比分辨率 */
    ledc_channel_t channel;             /* 通道（LEDC_CHANNEL_0~LEDC_CHANNEL_7） */
    uint32_t duty;                      /* 初始占空比 */
    int gpio_num;                       /* PWM输出管脚 */
}ledc_config_t;


/* 函数声明 */
void ledc_init(ledc_config_t *ledc_config);                             /* ledc初始化 */
void ledc_pwm_set_duty(ledc_config_t *ledc_config, uint16_t duty);      /* PWM占空比设置 */

/*使用方法：
    ledc_config_t *ledc_config = malloc(sizeof(ledc_config_t));
    
    ledc_config->clk_cfg         = LEDC_AUTO_CLK;           //启动定时器时，根据给出的分辨率和占空率参数自动选择ledc源时钟
    ledc_config->timer_num       = LEDC_TIMER_0;            //选择哪个定时器计数（LEDC_TIMER_0~LEDC_TIMER_3）
    ledc_config->freq_hz         = 1000;                    //1KHz（系统自动计算分配系数，并提供freq_hz频率给到定时器）
    ledc_config->duty_resolution = LEDC_TIMER_14_BIT;       //设置定时器最大计数值（请看技术手册表32.4.1）
    ledc_config->channel         = LEDC_CHANNEL_0;          //设置输出通道（LEDC_CHANNEL_0 ~ LEDC_CHANNEL_7） 
    ledc_config->duty            = 0;                       //一个周期内占高电平时间(占空比) 
    ledc_config->gpio_num        = LEDC_PWM_CH0_GPIO;       //PWM信号输出那个管脚 

    ledc_init(ledc_config);
    需要改变的时候使用ledc_pwm_set_duty(ledc_config, 80);*/
#endif
